﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace ArgosMembership.Componentes
{
    public class Encripcion
    {
        /// <summary>
        /// Encripcion de string, el input va con el salt
        /// </summary>
        /// <param name="input">string a encriptar</param>
        /// <seealso cref="http://blog.logiclabz.com/c/function-to-encrypt-string-in-c-net-using-sha1-algorithm.aspx"/>
        /// <seealso cref="http://www.codeproject.com/Articles/10154/NET-Encryption-Simplified"/>
        /// <returns>string hasheado</returns>
        public static string Encripta(string input)
        {
            //Resultado de la encripción
            string strResultado = string.Empty;
            //Bytes codificados
            Byte[] bytEncoded = null;
            //metodo de hasheo
            SHA1 AlgEncrSHA1 = null;
            //Codificacion del lenguaje
            Encoding latino = Encoding.GetEncoding("iso-8859-1");
            //Se inicializa la clase de hash
            using (AlgEncrSHA1 = new SHA1CryptoServiceProvider())
            {
                //Se hashea y se obtienen los bytes codificados en el lenguaje especificado
                bytEncoded = AlgEncrSHA1.ComputeHash(latino.GetBytes(input));
                //Convertir los bytes en string
                strResultado = BitConverter.ToString(bytEncoded);
            }
            //Remplazar guiones
            return strResultado.Replace("-", "");
        }

        /// <summary>
        /// Metodo de validacion de
        /// </summary>
        /// <param name="input">string a validar</param>
        /// <param name="hash">valor hash original</param>
        /// <returns>v=si son iguales, f= si son diferentes</returns>
        public static bool HashVerificar(string input, string hash)
        {
            // Hashear la entrada para compararla.
            string hashOfInput = Encripta(input);

            // Crear un StringComparer y compararlos valores Hash.
            StringComparer comparer = StringComparer.OrdinalIgnoreCase;

            if (0 == comparer.Compare(hashOfInput, hash))
                return true;
            else
                return false;
        }
    }
}
